package co.yixiang.yshop.module.product.service.campaigninfo;

import co.yixiang.yshop.framework.common.pojo.PageResult;
import co.yixiang.yshop.module.product.controller.admin.campaigninfo.vo.*;
import co.yixiang.yshop.module.product.dal.dataobject.campaigninfo.CampaignInfoDO;

import javax.validation.Valid;
import java.util.List;

/**
 * 活动信息 Service 接口
 *
 * @author moxiangrong
 */
public interface CampaignInfoService {

    /**
     * 创建活动信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createCampaignInfo(@Valid CampaignInfoCreateReqVO createReqVO);

    /**
     * 更新活动信息
     *
     * @param updateReqVO 更新信息
     */
    void updateCampaignInfo(@Valid CampaignInfoUpdateReqVO updateReqVO);

    /**
     * 删除活动信息
     *
     * @param id 编号
     */
    void deleteCampaignInfo(Long id);

    /**
     * 结束活动信息
     *
     * @param id 编号
     */
    void closeCampaignInfo(Long id);

    /**
     * 开始活动信息
     *
     * @param id 编号
     */
    void startCampaignInfo(Long id);

    /**
     * 获得活动信息
     *
     * @param id 编号
     * @return 活动信息
     */
    CampaignInfoRespVO getCampaignInfo(Long id);


    /**
     * 获得活动信息分页
     *
     * @param pageReqVO 分页查询
     * @return 活动信息分页
     */
    PageResult<CampaignInfoPageRespVO> getCampaignInfoPage(CampaignInfoPageReqVO pageReqVO);

    /**
     * 获得活动信息列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 活动信息列表
     */
    List<CampaignInfoDO> getCampaignInfoList(CampaignInfoExportReqVO exportReqVO);

    /**
     * 活动状态处理
     *
     * @param id
     */
    void campaignStateHandle(Long id);

    /**
     * 获得活动数据
     *
     * @param id 编号
     * @return 活动数据
     */
    CampaignDataRespVO getCampaignData(Long id);

    /**
     * 获得活动数据明细
     *
     * @param reqVO
     * @return
     */
    PageResult<CampaignDataDetailRespVO> getCampaignDataDetail(CampaignDataDetailPageReqVO reqVO);

    /**
     * 获得画布活动分页
     *
     * @param pageReqVO 分页查询
     * @return 活动信息分页
     */
    PageResult<CanvasCampaignPageRespVO> getCanvasCampaignPage(CanvasCampaignPageReqVO pageReqVO);
}
